package com.jvm;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * finalize 演示
 */
public class OOMTest {


    // 自救
    static List<Object> list = new ArrayList<>();

    // JVM设置
    // // ‐Xms10M ‐Xmx10M ‐XX:+PrintGCDetails ‐XX:+HeapDumpOnOutOfMemoryError ‐XX:HeapDumpPath=D:\jvm.dump
    public static void main(String[] args) {
        List<Object> objectList = new ArrayList<>();
        int i = 0;
        int j = 0;
        while (true) {
            // 和局部变量 objectList 有联系，在GC root根的引用链上，不会执行 finalize 方法
            objectList.add(new User(i++, UUID.randomUUID().toString()));
            // 这个对象是游离的, 通过 可达性分析算法 分析是不可达的，没有在GC root根引用链上。所以会执行 finalize 方法。
            new User(j--, UUID.randomUUID().toString());
        }
    }

}
